﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

using Neto.PermissionGenerate;

namespace Neto.Core.Entities;

/// <summary>
///     菜单
/// </summary>
[SugarTable("Sys_Menu", "菜单", IsDisabledDelete = true)]
public class SysMenu : SsFullEntityNoIdentity
{
    /// <summary>
    ///     节点类型(菜单、工具栏)
    ///     目录：Directory = 0,控制器：Controller=100,菜单：Menu=200,功能/方法：Action =300
    /// </summary>
    [SugarColumn(ColumnDescription = "节点类型(菜单、工具栏)")]
    public PgType PgType { get; set; }

    /// <summary>
    ///     菜单名称
    /// </summary>
    [SugarColumn(ColumnDescription = "菜单名称", Length = 100)]
    public string Name { get; set; }

    /// <summary>
    ///     菜单ID，全局唯一标识
    /// </summary>
    [SugarColumn(ColumnDescription = "菜单ID", Length = 100)]
    public string Code { get; set; }

    /// <summary>
    ///     菜单父Code
    /// </summary>
    [SugarColumn(ColumnDescription = "菜单父Code", Length = 100)]
    public string MenuPCode { get; set; }


    /// <summary>
    ///     区域
    /// </summary>
    [SugarColumn(ColumnDescription = "区域", Length = 50)]
    public string Area { get; set; }

    /// <summary>
    ///     控制器
    /// </summary>
    [SugarColumn(ColumnDescription = "控制器", Length = 50)]
    public string Controller { get; set; }

    /// <summary>
    ///     控制器Code,自动生成获取
    /// </summary>
    [SugarColumn(ColumnDescription = "控制器Code", Length = 50)]
    public string ControllerCode { get; set; }


    /// <summary>
    ///     默认Action Code
    ///     注意：自动生成，不能修改
    /// </summary>
    [SugarColumn(ColumnDescription = "菜单Action Code", Length = 50)]
    public string ActionCode { get; set; }

    /// <summary>
    ///     Action
    /// </summary>
    [SugarColumn(ColumnDescription = "Action", Length = 50)]
    public string Action { get; set; }


    /// <summary>
    ///     方法/Action名称,多个用英文逗号隔开
    ///     后台菜单页面名称(例如：index、info),API 接口可为空
    /// </summary>
    [SugarColumn(ColumnDescription = "方法/Action名称,多个用英文逗号隔开", Length = 200)]
    public string Actions { get; set; }

    /// <summary>
    ///     路由
    ///     例如：api/user/index
    ///     例如：HtAdmin/User/Index
    /// </summary>
    [SugarColumn(ColumnDescription = "路由", Length = 500)]
    public string Route { get; set; }


    /// <summary>
    ///     Url Key/前端Key
    /// </summary>
    [SugarColumn(ColumnDescription = "Url Key/前端Key", Length = 100)]
    public string UrlKey { get; set; }

    /// <summary>
    ///     前端对应URL 地址/代码等
    ///     例如：/user/index
    ///     例如：userIndex
    ///     例如：userEdit
    ///     例如：https://www.baidu.com
    /// </summary>
    [SugarColumn(ColumnDescription = "前端对应URL 地址/代码等", Length = 500)]
    public string Url { get; set; }

    /// <summary>
    ///     URL 地址参数(例如：?a=1&b=2)
    /// </summary>
    [SugarColumn(ColumnDescription = "URL 地址参数")]
    public string UrlPars { get; set; }


    /// <summary>
    ///     多语言key
    /// </summary>
    [SugarColumn(ColumnDescription = "多语言key")]
    public string I18nKey { get; set; }

    /// <summary>
    ///     图标
    /// </summary>
    [SugarColumn(ColumnDescription = "图标", Length = 100)]
    public string Icon { get; set; }

    /// <summary>
    ///     顺序(按从小到大排序)
    /// </summary>
    [SugarColumn(ColumnDescription = "顺序")]
    public int Sort { get; set; }

    /// <summary>
    ///     备注
    /// </summary>
    [SugarColumn(ColumnDescription = "备注")]
    public string Remark { get; set; }


    /// <summary>
    ///     打开方式（字典 0 无， 1内链 2外链）
    ///     Url(例如：HtAdmin/User/Index或https://www.baidu.com/xxxxx)
    /// </summary>
    [SugarColumn(ColumnDescription = "打开方式", DefaultValue = "0")]
    public MenuOpenType OpenType { get; set; }


    /// <summary>
    ///     外链
    /// </summary>
    [SugarColumn(ColumnDescription = "外链", DefaultValue = "")]
    public string Href { get; set; }
    #region 开关

    /// <summary>
    ///     是否启用
    /// </summary>
    [SugarColumn(ColumnDescription = "是否启用")]
    public bool IsEnable { get; set; } = true;

    /// <summary>
    ///     是否隐藏菜单
    /// </summary>
    [SugarColumn(ColumnDescription = "是否隐藏菜单", DefaultValue = "0")]
    public bool IsHideMenu { get; set; }

    /// <summary>
    ///     是否隐藏角色
    /// </summary>
    [SugarColumn(ColumnDescription = "是否隐藏角色", DefaultValue = "0")]
    public bool IsHideRole { get; set; }

    /// <summary>
    ///     是否开发用的，如果为true，只有开发账号可以使用
    /// </summary>
    [SugarColumn(ColumnDescription = "是否开发用的")]
    public bool IsDeveloper { get; set; }

    /// <summary>
    ///     是否手动添加，手动添加的不自动删除
    /// </summary>
    [SugarColumn(ColumnDescription = "是否手动添加")]
    public bool IsManualAdd { get; set; }

    /// <summary>
    ///     是否自动生成菜单/系统菜单；系统菜单和自动生成菜单禁止自动删除
    /// </summary>
    [SugarColumn(ColumnDescription = "是否系统", DefaultValue = "0")]
    public bool IsSystem { get; set; }

    // /// <summary>
    // ///     是否展开菜单
    // /// </summary>
    // [SugarColumn(ColumnDescription = "是否展开菜单")]
    // public bool IsExpand { get; set; }

    /// <summary>
    ///     是否菜单
    ///     用于区分Action是否是菜单
    /// </summary>
    [SugarColumn(ColumnDescription = "是否菜单", DefaultValue = "0")]
    public bool IsMenu { get; set; }

    /// <summary>
    ///     是否默认首页页面，例如Dashboard,Index,Home等
    /// </summary>
    [SugarColumn(ColumnDescription = "是否默认首页", DefaultValue = "false")]
    public bool IsHomePage { get; set; }
    
    /// <summary>
    /// 是否只验证登录（为true表示只验证用户是否登陆，不验证权限）
    /// 解释：用户登陆了，但是没有在角色权限中设置，用户登陆了就能访问的情况使用
    /// </summary>
    [SugarColumn(ColumnDescription = "是否只验证登录",DefaultValue = "false")]
    public bool IsLoginOnly { get; set; }
    
    #endregion
}